/**
 * Copyright 2014-2021  the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.webank.webase.sign.api.dao;


import com.webank.webase.sign.pojo.bo.UserParam;
import com.webank.webase.sign.pojo.po.UserInfoPo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * user repository.
 */
@Repository
public interface UserDao {
    /**
     * create table tb_user
     */
    void createTbUser();

    void insertUserInfo(UserInfoPo userInfoPo);

    UserInfoPo findUserBySignUserId(@Param("signUserId") String signUserId);

    UserInfoPo findUserByAddress(@Param("address") String address);

    UserInfoPo findLatestUpdateUser();
    
    Integer countOfUser(UserParam userParam);
    
    /**
     * select by encryptType
     */
    List<UserInfoPo> findUserList(UserParam userParam);

    /**
     * select by appId
     */
    List<UserInfoPo> findUserListByAppId(UserParam userParam);

    /**
     * delete user by address
     */
    int deleteUserBySignUserId(@Param("signUserId") String signUserId);

    List<UserInfoPo> findUserListByTime(@Param("beginTime")LocalDateTime beginTime, @Param("endTime")LocalDateTime endTime);
}
